#ifndef __LOG_H__
#define __LOG_H__
#include <stdio.h>

#ifdef __aarch64__
/* 交叉编译器定义了__aarch64__, ARM环境使用这里 */
#include <spinlock.h>
extern spinlock_t print_lock;

#define INFO(args, ...)                             \
    {                                               \
        spin_lock(&print_lock);                     \
        printf(args  __VA_OPT__(, ) __VA_ARGS__);   \
        spin_unlock(&print_lock);                   \
    }

#define WARN(args, ...)                             \
    {                                               \
        spin_lock(&print_lock);                     \
        printf("[WARNING]: "args  __VA_OPT__(, ) __VA_ARGS__);   \
        spin_unlock(&print_lock);                               \
    }

#define ERROR(args, ...)                             \
    {                                               \
        spin_lock(&print_lock);                     \
        printf("\033[31m""[ERROR]: "args"\033[0m"  __VA_OPT__(, ) __VA_ARGS__);   \
        spin_unlock(&print_lock);                                                   \
    }
#else   /* __aarch64__ */

/* DPI-C 环境使用这里 */
#define INFO(args, ...)                             \
    {                                               \
        printf(args  __VA_OPT__(, ) __VA_ARGS__);   \
    }

#define WARN(args, ...)                             \
    {                                               \
        printf("[WARNING]: "args  __VA_OPT__(, ) __VA_ARGS__);   \
    }

#define ERROR(args, ...)                             \
    {                                               \
        printf("\033[31m""[ERROR]: "args"\033[0m"  __VA_OPT__(, ) __VA_ARGS__);   \
    }
#endif /* __aarch64__ */

#endif /* __LOG_H__ */

